package com.tedu.api.list;
import org.junit.Test;

import java.util.*;
/**链表实现集合  包位置：java.util
 * List接口集合--三个实现类
 * ArrayList 实现类：数组实现
 *           特点：查询快【按照下标】，增删慢【改动下标：元素】
 * LinkedList 实现类：双向链表实现
 *            特点：查询慢【按照下标】，增删快【首，尾元素，中间元素】
 *ArrayList与LinkedList大部分方法完全一致
 * 添加add()  获取get() 删除 remove()
 * size() 获取集合总数 clear()清空集合元素
 *
 * 不一致的方法：
 * indexOf()  lastIndexOf()
 * addFirst()
 * addLast()
 * removeFirst()
 * removeLast()
 */
public class LinkedListAPI {
    @Test
    public void testIndexOf(){
        //创建双向链表集合
        List<String> list=new LinkedList<>();
        list.add("玛卡巴卡");
        list.add("依古比古");
        list.add("小点点");
        list.add("飞飞🐟");
        /**ArrayList与LinkedList通用方法
         * indexOf()  返回值：int
         * 作用:返回指定元素在集合中第一次出现的索引位置
         *     【理解：返回元素的下标位】
         *
         */
        int index=list.indexOf("飞飞🐟");
        /**LinkedList独有方法
         * LastIndexOf()  返回值：int
         * 作用：返回最后的元素在集合中出现的索引位置
         *
         */
        int lastIndex=list.lastIndexOf("飞飞🐟");
        System.out.println("返回最后元素下标："+lastIndex);

    }
    /**LinkedList独有方法
     * addFirst() 返回值：void
     * 作用：将指定元素添加至链表头部
     *addLast()   返回值
     * 作用：将指定元素添加至链表尾部
     *removeFirst()
     *removeLast()
     */
    @Test
    public void testAR(){
        //创建双向链表集合
        List<String> list=new LinkedList<>();
        list.add("玛卡巴卡");
        list.add("依古比古");
        list.add("小点点");
        list.add("飞飞🐟");
        //LinkedList独有方法
        ((LinkedList)list).addFirst("叮叮车");
        ((LinkedList)list).addLast("哈呼呼");
        System.out.println("双向链表；"+list);
        ((LinkedList)list).removeFirst();
        System.out.println("双向链表；"+list);

    }
}
